package game.source.gui;

import game.source.gui.ship.GuiPlayerShip;

import java.awt.Point;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 *GuiBackground:
 *	Controla a movimentação do fundo da tela. 
 */
public class GuiBackground extends GuiComponent{
	private BufferedImage	image;				//Imagem do fundo da tela
	private double			total_time;			//Tempo total de passagem em segundos
	private	Point			first_point;		//Posição na imagem do ponto superior esquerdo do fundo
	private double			vel;				//Velocidade em que o fundo anda em px/s
	private double			accumulator;		//acumulador de posição, marca quantos pixels a imagem deve andar
	private double			time_accumulator;	//acumulador de tempo, marca se o mapa já chegou no fim
	public GuiBackground(String image_path,long total_time){
		try {
			image = ImageIO.read(new File(GuiBackground.class.getResource(image_path).getFile()));
		} catch (IOException e) {
			e.printStackTrace();
			System.err.println("Arquivo: "+GuiPlayerShip.class.getResource(image_path)+" não pode ser aberto");
			System.exit(1);
		}
		this.total_time = total_time;
		this.time_accumulator = 0;
		this.vel = (double)(this.image.getHeight()-this.getPanelHeight())/this.total_time;
		first_point = new Point(0,this.image.getHeight()-this.getPanelHeight());
	}

	@Override
	public void show(long time){
		if(this.time_accumulator < (double)this.total_time){
			this.time_accumulator += (double)time/1000;
			this.accumulator += this.vel*time/1000;
			if(this.accumulator >= 1){
				this.first_point.y -= (int)this.accumulator;
				this.accumulator -= (int)this.accumulator;
			}
		}
		this.getGraphics().drawImage(this.image, 0, 0, this.getPanelWidth(), this.getPanelHeight() , 0, this.first_point.y, this.getPanelWidth(), this.first_point.y+this.getPanelHeight(), null);
	}
}
